<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <meta http-equiv="X-UA-Compatible" content="ie=edge">
  <title>Document</title>
</head>
<body>

  <script>
    /*
      作业

    */

    // 已知数组
    var arr = [ 10, 20, 30, 40, 50, 60 ]
    console.log('原始数组 : ', arr)

    // 准备要插入的数据
    // var n = 66

    // code run here ...
    // 方案1:
    // arr.push(n)
    // arr.sort(function (a, b) { return a - b })

    // 方案2:
    // 要插入的数字有几种情况
    // 1. 比 [0] 小
    // 2. 比 [length - 1] 大
    // 3. 在中间
    // 4. 和某一个一样
    // if (n <= arr[0]) { // 比最小的还小
    //   arr.unshift(n)
    // } else if (n >= arr[arr.length - 1]) { // 比最大的还大
    //   arr.push(n)
    // } else if (arr.indexOf(n) !== -1) { // 有一个一样的
    //   arr.splice(arr.indexOf(n), 0, n)
    // } else { // 其他情况需要比较插入
    //   // 22 33 44 ...
    //   // 需要循环比较
    //   // 问题: 循环从多少开始 ? 1
    //   for (var i = 1; i < arr.length; i++) {
    //     // 只要 n 比数组当前这一位的数据小, 插入到这一位的前面就可以了
    //     // 注意: 一定要写 break
    //     if (n < arr[i]) {
    //       arr.splice(i, 0, n)
    //       break
    //     }
    //   }
    // }


    // 优化
    // if (n >= arr[arr.length - 1]) {
    //   arr.push(n)
    // } else {
    //   for (var i = 0; i < arr.length; i++) {
    //     if (n <= arr[i]) {
    //       arr.splice(i, 0, n)
    //       break
    //     }
    //   }
    // }


    // 封装
    // 直接封装成功能函数
    //   function insert(要插入的数组, 要插入的数字) {}
    // 封装在 "数组方法空间" 内
    //   Array.prototype.insert = function (要插入的数字) {}

    Array.prototype.insert = function (n) {
      // 严谨性的判断
      // 1. 判断 n 为非数字
      if (isNaN(n)) return this

      // 2. 确定一下数组的顺序关系(升序还是降序)
      //    升序 [ 10, 20 ]
      //    降序 [ 20, 10 ]
      // 因为下面的逻辑是按照升序进行书写的
      // 只需要判断是否是降序
      if (this[this.length - 1] < this[0]) this.reverse()

      if (n >= this[this.length - 1]) {
        this.push(n)
      } else {
        for (var i = 0; i < this.length; i++) {
          if (n <= this[i]) {
            this.splice(i, 0, n)
            break
          }
        }
      }

      if (this[this.length - 1] < this[0]) this.reverse()

      return this
    }

    // 将来使用的时候
    var res = arr.insert('asdasd')



    console.log('插入之后 : ', arr)
    console.log('返回值 : ', arr)

  </script>
</body>
</html>
